from django.core.management.base import BaseCommand
from decimal import Decimal
from carbon.models import CarbonFactor


DEFAULT_FACTORS = [
    # 交通
    {'item_name': '地铁乘坐', 'category': '交通', 'emission_per_unit': Decimal('0.014'), 'unit': 'km'},
    {'item_name': '公交乘坐', 'category': '交通', 'emission_per_unit': Decimal('0.089'), 'unit': 'km'},
    {'item_name': '私家车行驶', 'category': '交通', 'emission_per_unit': Decimal('0.171'), 'unit': 'km'},
    {'item_name': '骑行', 'category': '交通', 'emission_per_unit': Decimal('0.0'), 'unit': 'km'},
    {'item_name': '步行', 'category': '交通', 'emission_per_unit': Decimal('0.0'), 'unit': 'km'},
    # 餐饮（按食材生命周期排放，单位kg食材）
    {'item_name': '牛肉', 'category': '餐饮', 'emission_per_unit': Decimal('27.0'), 'unit': 'kg'},
    {'item_name': '猪肉', 'category': '餐饮', 'emission_per_unit': Decimal('12.1'), 'unit': 'kg'},
    {'item_name': '鸡肉', 'category': '餐饮', 'emission_per_unit': Decimal('6.9'), 'unit': 'kg'},
    {'item_name': '大米', 'category': '餐饮', 'emission_per_unit': Decimal('2.7'), 'unit': 'kg'},
    # 能源
    {'item_name': '电力使用', 'category': '能源', 'emission_per_unit': Decimal('0.58'), 'unit': 'kWh'},
    {'item_name': '天然气', 'category': '能源', 'emission_per_unit': Decimal('2.0'), 'unit': 'm3'},
    {'item_name': '自来水', 'category': '能源', 'emission_per_unit': Decimal('0.344'), 'unit': 'm3'},
    # 日用品与材料
    {'item_name': '塑料', 'category': '日用品', 'emission_per_unit': Decimal('2.5'), 'unit': 'kg'},
    {'item_name': '纸张', 'category': '日用品', 'emission_per_unit': Decimal('1.2'), 'unit': 'kg'},
]


class Command(BaseCommand):
    help = '导入默认的碳排放系数库（幂等）'

    def handle(self, *args, **options):
        created = 0
        updated = 0
        for f in DEFAULT_FACTORS:
            obj, is_created = CarbonFactor.objects.get_or_create(
                item_name=f['item_name'],
                defaults={
                    'category': f['category'],
                    'emission_per_unit': f['emission_per_unit'],
                    'unit': f['unit']
                }
            )
            if is_created:
                created += 1
            else:
                changed = False
                if obj.category != f['category']:
                    obj.category = f['category']; changed = True
                if obj.emission_per_unit != f['emission_per_unit']:
                    obj.emission_per_unit = f['emission_per_unit']; changed = True
                if obj.unit != f['unit']:
                    obj.unit = f['unit']; changed = True
                if changed:
                    obj.save(); updated += 1
        self.stdout.write(self.style.SUCCESS(f'系数新增: {created}, 更新: {updated}'))